import traceback,ast
# 导入返回响应
from django.http import JsonResponse
# 导入数据库链接
from SaaSDevelTool.data_mysql_data import db
# 导入雪花算法
from SaaSDevelTool.data_schaeffer_algorithm import snowflake
# 调用机器人进行操作
from SaaSDevelTool.data_robot_message_notification import robot_message_notification
# 导入当前时间
from SaaSDevelTool.data_datetime_func import get_datatime


# 封装响应
def create_response(code: int, msg: str, data=None):
    """
    创建一个返回响应的函数，接受状态码、消息和数据作为参数
    """
    response_data = {"code": code, "msg": msg, "data": data}
    return JsonResponse(response_data)


# api接口错误信息检测
def error_message_detection(view_func):
    def decorator(*args, **kwargs):
        try:
            # 执行视图函数
            result = view_func(*args, **kwargs)
            return result
        except Exception as e:
            # 获取当前接口信息
            data = args
            # 获取异常信息
            err_msg = traceback.format_exc()
            # 生成唯一的错误ID
            sole = snowflake.generate_id()
            err_msg = err_msg.replace("'", '"')
            err_apis = str(data[1]).split(" ")
            # 获取请求路径
            err_path = str(data[0])[1:-30]
            # 获取请求方式
            err_api = err_apis[1]
            # 定义连接
            webhook_url = "https://open.feishu.cn/open-apis/bot/v2/hook/f1f3046f-4645-4c43-a4c8-0fd55eed2943"
            # 定义错误信息`
            err_data = {
                "msg_type": "post",
                "content": {
                    "post": {
                        "zh_cn": {
                            "title": "SaaS平台API错误通知",
                            "content": [
                                [
                                    {
                                        "tag": "text",
                                        "text": f"视图函数：{err_path.split('.')[-1]}\n"
                                                f"请求地址：{str(err_apis[-1])[1:-2]}\n"
                                                f"请求方式：{err_api}\n"
                                                f"请求时间：{get_datatime()}\n"
                                                f"错误编码：{sole}\n"
                                                f"请及时处理哟，亲~"
                                    }
                                ]
                            ]
                        }
                    }
                }
            }
            # 创建SQL语句
            create_sql = f"""
                INSERT INTO 
                    db_saas_center.base_info_err_log_table
                    (err_code, err_api_name, err_urls, err_time, err_data)
                VALUES
                    ('{sole}', '{err_path.split('.')[-1]}', '{str(err_apis[-1])[1:-2]}', '{get_datatime()}', '{str(err_msg)}');
                """
            # 执行SQL语句
            db.update(create_sql)
            # 发送飞书消息
            robot_message_notification(webhook_url, err_data)
            # 返回唯一的错误ID
            return create_response(code=500, msg=f"检测出错误，请将错误码：{sole} 发送给开发人员")

    return decorator
